package br.com.blutufi;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import javax.microedition.io.StreamConnectionNotifier;

public class Server implements Runnable {
	private static String msgComando, msgDestino, msgTipo;
	// JFormattedTextField edtnome;
	ChatFrame cf = null;

	public static void enviarMensagem(String mensagem) {
		enviar(msgDestino, "[SMS]", mensagem);
	}

	public Server() {
		cf = new ChatFrame(null);
	}

	StreamConnectionNotifier notifier;
	StreamConnection stream;
	public static InputStream input;
	public static OutputStream output;

	/**
	 * Fluxo de Execução Principal
	 */
	@Override
	public void run() {

		// Identificador Único de Conexão
		String uuid = "879c3537-ae66-4013-a677-9b7e5339d13c";
		// Endereço para Conexão
		String address = "btspp://localhost:" + uuid.replace("-", "");

		try {
			// Abertura de Conexão
			notifier = (StreamConnectionNotifier) Connector.open(address);
			// Fluxo de Conexão
			stream = notifier.acceptAndOpen();
			// Captura de Fluxos
			input = stream.openInputStream();
			output = stream.openOutputStream();

			// Laço de Repetição
			int size;
			byte content[]; // Auxiliares de Leitura
			String message = ""; // Mensagem Enviada pelo Cliente
			while (!message.equals("SAIR")) {
				// Tamanho dos Dados
				size = input.read(); // Quantidade de Bytes
				// Buffer de Leitura
				content = new byte[size];
				// Preenchimento dos Dados
				input.read(content); // Entrada de Informação
				// Transformação da Mensagem Enviada
				message = new String(content); // Novo Elemento
				// Exibição na Saída Padrão

				// se chegar mensagem
				System.out.println(message);
				if ((cf == null) || (cf.isDisplayable() == false)) {
					cf = new ChatFrame(message);
				} else {
					cf.atualizaMessage(message);
				}
			}
		} catch (IOException e) {
			// Erro Encontrado
			e.printStackTrace();
		}
	}

	public static void enviar(String destino, String tipo, String sms) {
		// Formato da mensagem: tipo+destino+:+sms
		String msmformadata = tipo + destino + ":" + sms;
		byte content[] = msmformadata.getBytes();
		try { // Possibilidade de Erro
			output.write(content.length); // Tamanho do Conteúdo
			output.write(content); // Conteúdo Propriamente Dito
		} catch (IOException e) { // Erro Encontrado
			// Aviso de Erro ao Usuário
		}
	}

	public static void main(String args[]) {
		Server server = new Server();
		server.run();
	}

}
